package com.hlf.modules.base.service;

import com.hlf.common.page.Page;
import com.hlf.common.page.PageReturn;
import com.hlf.modules.base.entity.BaseModel;

/**
 * 基础服务层接口
 * 
 * @author shuliangxing
 *
 * @date 2017年3月23日 上午11:55:13
 */
public interface BaseService<E extends BaseModel> {

    /**
     * 根据id硬删除
     *
     * @param id
     * @author shuliangxing
     * @date 2017年3月23日 下午2:07:01
     */
    void deleteByIdHard(String id);

    /**
     * 根据id软删除
     *
     * @param id
     * @author shuliangxing
     * @date 2017年3月23日 下午2:13:17
     */
    void deleteByIdSoft(String id);

    /**
     * 全字段新增
     *
     * @param record
     *            实体对象
     * @author shuliangxing
     * @date 2017年3月23日 下午2:13:27
     */
    void insertAll(E record);

    /**
     * 根据非空字段新增
     *
     * @param record
     *            实体对象
     * @author shuliangxing
     * @date 2017年3月23日 下午2:14:59
     */
    void insertSelective(E record);

    /**
     * 根据id查询
     *
     * @param id
     * @return 实体对象
     * @author shuliangxing
     * @date 2017年3月23日 下午2:24:03
     */
    E selectById(String id);

    /**
     * 根据id更新全字段
     *
     * @param record
     *            实体对象
     * @author shuliangxing
     * @date 2017年3月23日 下午2:29:28
     */
    void updateByIdAll(E record);

    /**
     * 根据id更新非空字段
     *
     * @param record
     *            实体对象
     * @author shuliangxing
     * @date 2017年3月23日 下午2:31:30
     */
    void updateByIdSelective(E record);

    /**
     * 分页查询,返回总页数和总记录数,数据量大时效率较低
     *
     * @param record
     *            实体对象
     * @param page
     *            分页参数对象
     * @return 分页结果集包装对象
     * @author shuliangxing
     * @date 2017年3月23日 下午2:54:41
     */
    PageReturn<E> selectForPage(E record, Page page);

    /**
     * 分页查询,不返回总页数和总记录数,数据量大时效率较高
     *
     * @param record
     *            实体对象
     * @param page
     *            分页参数对象
     * @return 分页结果集包装对象
     * @author shuliangxing
     * @date 2017年3月23日 下午2:54:41
     */
    PageReturn<E> selectForPageNoTotalPage(E record, Page page);

}
